#姓名：伍弘毅
#日期：2019年9月22日
#版本：V1.0
#功能：if语句


##简单的if语句
#最简单的if语句只有一个测试和一个操作
#假设有一个表示某人年龄的变量，而你想知道这个人是否够投票的年龄，可使用如下代码

#example1
age = 19
if age >= 18:
	print("you are old enough to vote!")
#Python检查变量age的值是否大于或等于18
#答案是肯定的，因此Python执行缩进的print语句
#在if语句中，缩进的作用与for循环中相同
#如果测试通过了，将执行if语句后面所有缩进的代码行，否则将忽略它们

#在紧跟在if 语句后面的代码块中，可根据需要包含任意数量的代码行
#下面在一个人够投票的年龄时再打印一行输出，问他是否登记了

#example2
age = 19
if age >= 18:
	print("you are old enough to vote!")
	print("Have you registered to vite yet?")
#条件测试通过了，而两条print语句都缩进了，因此它们都将执行
#如果age的值小于18，这个程序将不会有任何输出


##if-else语句
#经常需要在条件测试通过了时执行一个操作，并在没有通过时执行另一个操作
#在这种情况下，可使用Python提供的if-else语句
#if-else语句块类似于简单的if语句，但其中的else语句让你能够
#指定条件测试未通过时要执行的操作

#example3
#下面的代码在一个人够投票的年龄时显示与前面相同的消息
#同时在这个人不够投票的年龄时也显示一条消息

age = 17
if age >= 18:
	print("you are old enough to vote!")
	print("Have you registered to vote yet")
else:
	print("Sorry, you are too young to vote.")
	print("Please register to vote as soon as you turn 18!")
#if-else结构非常适合用于要让Python执行两种操作之一的情形
#在这种简单的if-else结构中，总是会执行两个操作中的一个


##if-elif-else结构
#经常需要检查超过两个的情形，为此可使用Python提供的if-elif-else结构
#Python只执行if-elif-else结构中的一个代码块，它依次检查每个条件测试
#直到遇到通过了的条件测试。测试通过后
#Python将执行紧跟在它后面的代码，并跳过余下的测试

#example4
#根据年龄段收费的游乐场:4岁以下免费;4~18岁收费5美元;18岁（含）以上收费10美元

age = 12
if age < 4:
	print("Your admission cost is $0.")
elif age < 18:
	print("Your admission cost is $5.")
else:
	print("Your admission cost is $10.")

#为让代码更简洁，可不在if-elif-else代码块中打印门票价格，而只在其中设置门票价格
#并在它后面添加一条简单的print语句

#example5

age = 18
if age < 4:
	price = 0
elif age < 18:
	price = 5
else:
	price = 10
print("Your admission cost is $" + str(price) + '.')
#这些代码的输出与前一个示例相同，但if-elif-else结构的作用更小
#它只确定门票价格，而不是在确定门票价格的同时打印一条消息
#除效率更高外，这些修订后的代码还更容易修改：要调整输出消息的内容
#只需修改一条而不是三条print语句


##使用多个elif代码块
#可根据需要使用任意数量的elif代码块

#example6
age = 19
if age < 4:
	price = 0
elif age < 18:
	price = 5
elif age < 65:
	price = 10
else:
	price = 5
print("Your admission cost is $" + str(price) + '.')


##省略else模块
#Python并不要求if-elif结构后面必须有else代码块
#在有些情况下，else代码块很有用
#而在其他一些情况下，使用一条elif语句来处理特定的情形更清晰

#example7
age = 78
if age <4:
	price = 0
elif age < 18:
	price = 5
elif age < 65:
	price = 10
elif age >= 65:
	price = 5
	
print("Your admission cost is $" + str(price) + '.')
#最后的elif代码块在顾客的年龄超过65（含）时，将价格设置为5美元
#这比使用else代码块更清晰些。经过这样的修改后
#每个代码块都仅在通过了相应的测试时才会执行
#else是一条包罗万象的语句，只要不满足任何if或elif中的条件测试，其中的代码就会执行
#这可能会引入无效甚至恶意的数据。如果知道最终要测试的条件
#应考虑使用一个elif代码块来代替else代码块。这样，你就可以肯定
#仅当满足相应的条件时，你的代码才会执行


##测试多个条件
#if-elif-else结构功能强大，但仅适合用于只有一个条件满足的情况
#遇到通过了的测试后，Python就跳过余下的测试
#这种行为很好，效率很高，让你能够测试一个特定的条件
#然而，有时候必须检查你关心的所有条件
#在这种情况下，应使用一系列不包含elif和else代码块的简单if语句
#在可能有多个条件为True，且你需要在每个条件为True时都采取相应措施时，适合使用这种方法

#example8
requested_toppings = ['mushrooms', 'extra cheese']

if 'mushrooms' in requested_toppings:
	print("Adding mushrooms.")
if 'pepperoni' in requested_toppings:
	print("Adding pepperoni.")
if 'extra cheese' in requested_toppings:
	print("Adding extra cheese.")
	
print("\nFinished making your pizza!")

#如果像下面使用if—elif-else结构，代码将不能正确运行
#因为有一个测试通过后，就会跳过余下的测试

'''
#example9:错误示例,代码可以运行，但逻辑错误，结果与预期不符
requested_toppings = ['mushrooms', 'extra cheese']

if 'mushrooms' in requested_toppings:
	print("Adding mushrooms.")
elif 'pepperoni' in requested_toppings:
	print("Adding pepperoni.")
elif 'extra cheese' in requested_toppings:
	print("Adding extra cheese.")

print("\nFinished making your pizza!")
#第一个测试检查列表中是否包含'mushrooms'，它通过了，因此将在比萨中添加蘑菇。
#然而，Python将跳过if-elif-else结构中余下的测试，不再检查列表中是否包含
#'extra cheese'和'pepperoni'
#其结果是，将添加顾客点的第一种配料，但不会添加其他的配料

'''


##总结：
#如果只想执行一个代码块，就使用if-elif-else结构
#如果要运行多个代码块，就使用一系列独立的if语句
